#ifndef CNC_MOTION_CONTROL_H
#define CNC_MOTION_CONTROL_H

#include <bcm/bcm.h>

namespace cnc {

	namespace motion {

		// Dimensioning and units must be handled by the executive
		struct Control : public bcm::Interface
		{
			// general
			virtual bool open() = 0;
			virtual bool close() = 0;
	//		virtual MotionStatus getMotionStatus() = 0;
			// motion setup
	//		virtual void setExactStopCheck(bool exactStopCheck) = 0;
			// setup acceleration times and all that...
			// automatic tool changer
			//...
			// axes
	//		virtual void setActivePlane(PlaneID planeID) = 0;
	//		virtual void setMotionType(MotionTypeID motionTypeID) = 0;
			virtual void findZero(unsigned int axis) = 0;
	//		virtual void setFeedrateType(FeedrateType feedrateType) = 0;
	//		virtual void setFeedrate(uint32_t counts) = 0;
			// spindle
	//		virtual void setSpindleRotation(SpindleRotation spindleRotation) = 0;
	//		virtual void setSpindleSpeed(uint32_t spindleSpeed) = 0;
			//virtual void setSpindleConstantSurfaceSpeed(bool css) = 0; // Lathe only
		};

	} // namespace motion

} // namespace cnc

#endif
